Repository navigation
test: harden fixture and generated-client validation - #159
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
- Accept boolean exclusiveMinimum and exclusiveMaximum flags and retain both true and false when lowering property validation into the shared IR. - Preserve the previously accepted numeric representation through ExclusiveBound and document the public ObjectSchema field type change. - Pin boolean and legacy numeric behavior through the public parser and lowerer.
adamcavendish
force-pushed
the
adamcavendish/harden-validation-pipeline
branch
from
October 20, 2026 03:41
66846f8 to
bd10691
Compare
- Resolve nested fixture paths exactly once and fail missing files, unreadable directories, and empty discovery rather than silently passing parser tests. - Share fixture registration between the Cargo build script and in-process regression tests without launching compilers or test runners from tests. - Exercise malformed upstream documents as explicit parse rejections and remove stale duplicated exclusions without weakening valid-document coverage.
- Reject missing build manifests and empty project selections across the native validators instead of accepting successful builds with no compiled projects. - Preserve Rust dependency caches across fixtures and invocations while honoring an explicitly configured Cargo target directory. - Install Python dependencies and resolve the type checker once per backend, retaining visible installation failures and ordinary native tool execution.
- Replace the Rust-driven Gradle harness and global directory locks with native Java and Kotlin consumer projects using unmodified CLI-generated dependencies. - Preserve charset, header, null, and union behavior with ordinary JUnit sources and checked-in consumer manifests and dependency lockfiles. - Assert specific alternatives precede Any and verify complete fallback, tagged, adjacent, and external payloads instead of wrapper identity alone.
- Select current stable Rust for ordinary validation while retaining explicit, separate MSRV checks and generated libraries' declared compilation targets. - Run every native golden build and Rust/JVM consumer suite from the full local entrypoint and independent CI jobs, with reusable build caches. - Lint orchestration scripts directly and document in-process fixture coverage without Python tooling or subprocess-driven test programs.
adamcavendish
force-pushed
the
adamcavendish/harden-validation-pipeline
branch
from
October 20, 2026 08:03
bd10691 to
9866d86
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Make fixture and generated-client validation fail closed, and keep native consumer builds outside the generator's Rust test suite.
Problem
Nested upstream fixture paths repeated directory prefixes, while missing files silently passed their parser tests. Golden validators could return success without compiling a project. Full local validation omitted native golden builds, and the remaining JVM harness launched Gradle inside Rust tests with global locks that survived interrupted processes.
Activating the real nested fixtures also exposed rejection of valid OpenAPI 3.0 boolean exclusive bounds.
Behavior
Compatibility and boundaries
ObjectSchema.exclusive_minimumandexclusive_maximumnow useOption<ExclusiveBound>rather thanOption<serde_json::Number>. Boolean values retain bothtrueandfalse; previously accepted numeric inputs keep their existing lowering behavior. OpenAPI 3.1/3.2 bound handling is unchanged.build.rsand ordinary in-process Rust tests. No Python tooling scripts or subprocess-driven test harnesses are added, including standalone helpers or meta-tests around CLI/build entrypoints. just/CI directly invoke the native validation tools and consumer projects.test_fixture_rejections.txtentry must remain in the final registered fixture set. Missing files and entries removed by skip rules now fail registration instead of silently removing their tests.